Législatives 2024
Etude : Prévisions des intentions de votes
Premier Tour
Auteur: Stéphane Srsa
In [77]:
# Librairies et fonctions
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.pyplot as plt
import folium
from folium.features import GeoJson, GeoJsonTooltip
import geopandas as gpd
from branca.element import Element
import warnings
warnings.filterwarnings("ignore")
from Legis_Fonctions import *
In [5]:
# Charger les fichiers des résultats par circonscription et par commune:
Europ2024 = pd.read_csv('resultats-definitifs-par-circonscription.csv', sep=";")
# Renommer les colonnes pour correspondance au df 'gdf'
Europ2024.rename(columns={'Code circonscription législative': 'codeCirconscription',
'Libellé circonscription législative':'nomCirconscription','Libellé département':'nomDepartement'}, inplace=True)
In [6]:
Europ2024.info(1)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 577 entries, 0 to 576 Data columns (total 322 columns): # Column Dtype --- ------ ----- 0 Code département object 1 nomDepartement object 2 codeCirconscription object 3 nomCirconscription object 4 Inscrits int64 5 Votants int64 6 % Votants object 7 Abstentions int64 8 % Abstentions object 9 Exprimés int64 10 % Exprimés/inscrits object 11 % Exprimés/votants object 12 Blancs int64 13 % Blancs/inscrits object 14 % Blancs/votants object 15 Nuls int64 16 % Nuls/inscrits object 17 % Nuls/votants object 18 Numéro de panneau 1 int64 19 Nuance liste 1 object 20 Libellé abrégé de liste 1 object 21 Libellé de liste 1 object 22 Voix 1 int64 23 % Voix/inscrits 1 object 24 % Voix/exprimés 1 object 25 Sièges 1 int64 26 Numéro de panneau 2 int64 27 Nuance liste 2 object 28 Libellé abrégé de liste 2 object 29 Libellé de liste 2 object 30 Voix 2 int64 31 % Voix/inscrits 2 object 32 % Voix/exprimés 2 object 33 Sièges 2 int64 34 Numéro de panneau 3 int64 35 Nuance liste 3 object 36 Libellé abrégé de liste 3 object 37 Libellé de liste 3 object 38 Voix 3 int64 39 % Voix/inscrits 3 object 40 % Voix/exprimés 3 object 41 Sièges 3 int64 42 Numéro de panneau 4 int64 43 Nuance liste 4 object 44 Libellé abrégé de liste 4 object 45 Libellé de liste 4 object 46 Voix 4 int64 47 % Voix/inscrits 4 object 48 % Voix/exprimés 4 object 49 Sièges 4 int64 50 Numéro de panneau 5 int64 51 Nuance liste 5 object 52 Libellé abrégé de liste 5 object 53 Libellé de liste 5 object 54 Voix 5 int64 55 % Voix/inscrits 5 object 56 % Voix/exprimés 5 object 57 Sièges 5 int64 58 Numéro de panneau 6 int64 59 Nuance liste 6 object 60 Libellé abrégé de liste 6 object 61 Libellé de liste 6 object 62 Voix 6 int64 63 % Voix/inscrits 6 object 64 % Voix/exprimés 6 object 65 Sièges 6 int64 66 Numéro de panneau 7 int64 67 Nuance liste 7 object 68 Libellé abrégé de liste 7 object 69 Libellé de liste 7 object 70 Voix 7 int64 71 % Voix/inscrits 7 object 72 % Voix/exprimés 7 object 73 Sièges 7 int64 74 Numéro de panneau 8 int64 75 Nuance liste 8 object 76 Libellé abrégé de liste 8 object 77 Libellé de liste 8 object 78 Voix 8 int64 79 % Voix/inscrits 8 object 80 % Voix/exprimés 8 object 81 Sièges 8 int64 82 Numéro de panneau 9 int64 83 Nuance liste 9 object 84 Libellé abrégé de liste 9 object 85 Libellé de liste 9 object 86 Voix 9 int64 87 % Voix/inscrits 9 object 88 % Voix/exprimés 9 object 89 Sièges 9 int64 90 Numéro de panneau 10 int64 91 Nuance liste 10 object 92 Libellé abrégé de liste 10 object 93 Libellé de liste 10 object 94 Voix 10 int64 95 % Voix/inscrits 10 object 96 % Voix/exprimés 10 object 97 Sièges 10 int64 98 Numéro de panneau 11 int64 99 Nuance liste 11 object 100 Libellé abrégé de liste 11 object 101 Libellé de liste 11 object 102 Voix 11 int64 103 % Voix/inscrits 11 object 104 % Voix/exprimés 11 object 105 Sièges 11 int64 106 Numéro de panneau 12 int64 107 Nuance liste 12 object 108 Libellé abrégé de liste 12 object 109 Libellé de liste 12 object 110 Voix 12 int64 111 % Voix/inscrits 12 object 112 % Voix/exprimés 12 object 113 Sièges 12 int64 114 Numéro de panneau 13 int64 115 Nuance liste 13 object 116 Libellé abrégé de liste 13 object 117 Libellé de liste 13 object 118 Voix 13 int64 119 % Voix/inscrits 13 object 120 % Voix/exprimés 13 object 121 Sièges 13 int64 122 Numéro de panneau 14 int64 123 Nuance liste 14 object 124 Libellé abrégé de liste 14 object 125 Libellé de liste 14 object 126 Voix 14 int64 127 % Voix/inscrits 14 object 128 % Voix/exprimés 14 object 129 Sièges 14 int64 130 Numéro de panneau 15 int64 131 Nuance liste 15 object 132 Libellé abrégé de liste 15 object 133 Libellé de liste 15 object 134 Voix 15 int64 135 % Voix/inscrits 15 object 136 % Voix/exprimés 15 object 137 Sièges 15 int64 138 Numéro de panneau 16 int64 139 Nuance liste 16 object 140 Libellé abrégé de liste 16 object 141 Libellé de liste 16 object 142 Voix 16 int64 143 % Voix/inscrits 16 object 144 % Voix/exprimés 16 object 145 Sièges 16 int64 146 Numéro de panneau 17 int64 147 Nuance liste 17 object 148 Libellé abrégé de liste 17 object 149 Libellé de liste 17 object 150 Voix 17 int64 151 % Voix/inscrits 17 object 152 % Voix/exprimés 17 object 153 Sièges 17 int64 154 Numéro de panneau 18 int64 155 Nuance liste 18 object 156 Libellé abrégé de liste 18 object 157 Libellé de liste 18 object 158 Voix 18 int64 159 % Voix/inscrits 18 object 160 % Voix/exprimés 18 object 161 Sièges 18 int64 162 Numéro de panneau 19 int64 163 Nuance liste 19 object 164 Libellé abrégé de liste 19 object 165 Libellé de liste 19 object 166 Voix 19 int64 167 % Voix/inscrits 19 object 168 % Voix/exprimés 19 object 169 Sièges 19 int64 170 Numéro de panneau 20 int64 171 Nuance liste 20 object 172 Libellé abrégé de liste 20 object 173 Libellé de liste 20 object 174 Voix 20 int64 175 % Voix/inscrits 20 object 176 % Voix/exprimés 20 object 177 Sièges 20 int64 178 Numéro de panneau 21 int64 179 Nuance liste 21 object 180 Libellé abrégé de liste 21 object 181 Libellé de liste 21 object 182 Voix 21 int64 183 % Voix/inscrits 21 object 184 % Voix/exprimés 21 object 185 Sièges 21 int64 186 Numéro de panneau 22 int64 187 Nuance liste 22 object 188 Libellé abrégé de liste 22 object 189 Libellé de liste 22 object 190 Voix 22 int64 191 % Voix/inscrits 22 object 192 % Voix/exprimés 22 object 193 Sièges 22 int64 194 Numéro de panneau 23 int64 195 Nuance liste 23 object 196 Libellé abrégé de liste 23 object 197 Libellé de liste 23 object 198 Voix 23 int64 199 % Voix/inscrits 23 object 200 % Voix/exprimés 23 object 201 Sièges 23 int64 202 Numéro de panneau 24 int64 203 Nuance liste 24 object 204 Libellé abrégé de liste 24 object 205 Libellé de liste 24 object 206 Voix 24 int64 207 % Voix/inscrits 24 object 208 % Voix/exprimés 24 object 209 Sièges 24 int64 210 Numéro de panneau 25 int64 211 Nuance liste 25 object 212 Libellé abrégé de liste 25 object 213 Libellé de liste 25 object 214 Voix 25 int64 215 % Voix/inscrits 25 object 216 % Voix/exprimés 25 object 217 Sièges 25 int64 218 Numéro de panneau 26 int64 219 Nuance liste 26 object 220 Libellé abrégé de liste 26 object 221 Libellé de liste 26 object 222 Voix 26 int64 223 % Voix/inscrits 26 object 224 % Voix/exprimés 26 object 225 Sièges 26 int64 226 Numéro de panneau 27 int64 227 Nuance liste 27 object 228 Libellé abrégé de liste 27 object 229 Libellé de liste 27 object 230 Voix 27 int64 231 % Voix/inscrits 27 object 232 % Voix/exprimés 27 object 233 Sièges 27 int64 234 Numéro de panneau 28 int64 235 Nuance liste 28 object 236 Libellé abrégé de liste 28 object 237 Libellé de liste 28 object 238 Voix 28 int64 239 % Voix/inscrits 28 object 240 % Voix/exprimés 28 object 241 Sièges 28 int64 242 Numéro de panneau 29 int64 243 Nuance liste 29 object 244 Libellé abrégé de liste 29 object 245 Libellé de liste 29 object 246 Voix 29 int64 247 % Voix/inscrits 29 object 248 % Voix/exprimés 29 object 249 Sièges 29 int64 250 Numéro de panneau 30 int64 251 Nuance liste 30 object 252 Libellé abrégé de liste 30 object 253 Libellé de liste 30 object 254 Voix 30 int64 255 % Voix/inscrits 30 object 256 % Voix/exprimés 30 object 257 Sièges 30 int64 258 Numéro de panneau 31 int64 259 Nuance liste 31 object 260 Libellé abrégé de liste 31 object 261 Libellé de liste 31 object 262 Voix 31 int64 263 % Voix/inscrits 31 object 264 % Voix/exprimés 31 object 265 Sièges 31 int64 266 Numéro de panneau 32 int64 267 Nuance liste 32 object 268 Libellé abrégé de liste 32 object 269 Libellé de liste 32 object 270 Voix 32 int64 271 % Voix/inscrits 32 object 272 % Voix/exprimés 32 object 273 Sièges 32 int64 274 Numéro de panneau 33 int64 275 Nuance liste 33 object 276 Libellé abrégé de liste 33 object 277 Libellé de liste 33 object 278 Voix 33 int64 279 % Voix/inscrits 33 object 280 % Voix/exprimés 33 object 281 Sièges 33 int64 282 Numéro de panneau 34 int64 283 Nuance liste 34 object 284 Libellé abrégé de liste 34 object 285 Libellé de liste 34 object 286 Voix 34 int64 287 % Voix/inscrits 34 object 288 % Voix/exprimés 34 object 289 Sièges 34 int64 290 Numéro de panneau 35 int64 291 Nuance liste 35 object 292 Libellé abrégé de liste 35 object 293 Libellé de liste 35 object 294 Voix 35 int64 295 % Voix/inscrits 35 object 296 % Voix/exprimés 35 object 297 Sièges 35 int64 298 Numéro de panneau 36 int64 299 Nuance liste 36 object 300 Libellé abrégé de liste 36 object 301 Libellé de liste 36 object 302 Voix 36 int64 303 % Voix/inscrits 36 object 304 % Voix/exprimés 36 object 305 Sièges 36 int64 306 Numéro de panneau 37 int64 307 Nuance liste 37 object 308 Libellé abrégé de liste 37 object 309 Libellé de liste 37 object 310 Voix 37 int64 311 % Voix/inscrits 37 object 312 % Voix/exprimés 37 object 313 Sièges 37 int64 314 Numéro de panneau 38 int64 315 Nuance liste 38 object 316 Libellé abrégé de liste 38 object 317 Libellé de liste 38 object 318 Voix 38 int64 319 % Voix/inscrits 38 object 320 % Voix/exprimés 38 object 321 Sièges 38 int64 dtypes: int64(120), object(202) memory usage: 1.4+ MB
In [7]:
#--------------------------------------------- Mise en valeurs numériques des colonnes 'pourcentage' ---------------------------
# Colonnes récurrentes (par liste)
colonnes1 = [f'% Voix/exprimés {i}' for i in range(1, 39)]
colonnes2 = [f'% Voix/inscrits {i}' for i in range(1, 39)]
colonnes = colonnes1 + colonnes2
# Switch from 'object' to 'float64':
for col in colonnes:
Europ2024[col] = Europ2024[col].str.replace(',', '.').str.rstrip('%').astype('float')
# Colonnes fixes
colonnes = [
'% Votants', '% Abstentions', '% Exprimés/inscrits', '% Exprimés/votants',
'% Blancs/inscrits', '% Blancs/votants', '% Nuls/inscrits', '% Nuls/votants'
]
for col in colonnes:
Europ2024[col] = Europ2024[col].str.replace(',', '.').str.rstrip('%').astype('float')
Europ2024.info(1)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 577 entries, 0 to 576 Data columns (total 322 columns): # Column Dtype --- ------ ----- 0 Code département object 1 nomDepartement object 2 codeCirconscription object 3 nomCirconscription object 4 Inscrits int64 5 Votants int64 6 % Votants float64 7 Abstentions int64 8 % Abstentions float64 9 Exprimés int64 10 % Exprimés/inscrits float64 11 % Exprimés/votants float64 12 Blancs int64 13 % Blancs/inscrits float64 14 % Blancs/votants float64 15 Nuls int64 16 % Nuls/inscrits float64 17 % Nuls/votants float64 18 Numéro de panneau 1 int64 19 Nuance liste 1 object 20 Libellé abrégé de liste 1 object 21 Libellé de liste 1 object 22 Voix 1 int64 23 % Voix/inscrits 1 float64 24 % Voix/exprimés 1 float64 25 Sièges 1 int64 26 Numéro de panneau 2 int64 27 Nuance liste 2 object 28 Libellé abrégé de liste 2 object 29 Libellé de liste 2 object 30 Voix 2 int64 31 % Voix/inscrits 2 float64 32 % Voix/exprimés 2 float64 33 Sièges 2 int64 34 Numéro de panneau 3 int64 35 Nuance liste 3 object 36 Libellé abrégé de liste 3 object 37 Libellé de liste 3 object 38 Voix 3 int64 39 % Voix/inscrits 3 float64 40 % Voix/exprimés 3 float64 41 Sièges 3 int64 42 Numéro de panneau 4 int64 43 Nuance liste 4 object 44 Libellé abrégé de liste 4 object 45 Libellé de liste 4 object 46 Voix 4 int64 47 % Voix/inscrits 4 float64 48 % Voix/exprimés 4 float64 49 Sièges 4 int64 50 Numéro de panneau 5 int64 51 Nuance liste 5 object 52 Libellé abrégé de liste 5 object 53 Libellé de liste 5 object 54 Voix 5 int64 55 % Voix/inscrits 5 float64 56 % Voix/exprimés 5 float64 57 Sièges 5 int64 58 Numéro de panneau 6 int64 59 Nuance liste 6 object 60 Libellé abrégé de liste 6 object 61 Libellé de liste 6 object 62 Voix 6 int64 63 % Voix/inscrits 6 float64 64 % Voix/exprimés 6 float64 65 Sièges 6 int64 66 Numéro de panneau 7 int64 67 Nuance liste 7 object 68 Libellé abrégé de liste 7 object 69 Libellé de liste 7 object 70 Voix 7 int64 71 % Voix/inscrits 7 float64 72 % Voix/exprimés 7 float64 73 Sièges 7 int64 74 Numéro de panneau 8 int64 75 Nuance liste 8 object 76 Libellé abrégé de liste 8 object 77 Libellé de liste 8 object 78 Voix 8 int64 79 % Voix/inscrits 8 float64 80 % Voix/exprimés 8 float64 81 Sièges 8 int64 82 Numéro de panneau 9 int64 83 Nuance liste 9 object 84 Libellé abrégé de liste 9 object 85 Libellé de liste 9 object 86 Voix 9 int64 87 % Voix/inscrits 9 float64 88 % Voix/exprimés 9 float64 89 Sièges 9 int64 90 Numéro de panneau 10 int64 91 Nuance liste 10 object 92 Libellé abrégé de liste 10 object 93 Libellé de liste 10 object 94 Voix 10 int64 95 % Voix/inscrits 10 float64 96 % Voix/exprimés 10 float64 97 Sièges 10 int64 98 Numéro de panneau 11 int64 99 Nuance liste 11 object 100 Libellé abrégé de liste 11 object 101 Libellé de liste 11 object 102 Voix 11 int64 103 % Voix/inscrits 11 float64 104 % Voix/exprimés 11 float64 105 Sièges 11 int64 106 Numéro de panneau 12 int64 107 Nuance liste 12 object 108 Libellé abrégé de liste 12 object 109 Libellé de liste 12 object 110 Voix 12 int64 111 % Voix/inscrits 12 float64 112 % Voix/exprimés 12 float64 113 Sièges 12 int64 114 Numéro de panneau 13 int64 115 Nuance liste 13 object 116 Libellé abrégé de liste 13 object 117 Libellé de liste 13 object 118 Voix 13 int64 119 % Voix/inscrits 13 float64 120 % Voix/exprimés 13 float64 121 Sièges 13 int64 122 Numéro de panneau 14 int64 123 Nuance liste 14 object 124 Libellé abrégé de liste 14 object 125 Libellé de liste 14 object 126 Voix 14 int64 127 % Voix/inscrits 14 float64 128 % Voix/exprimés 14 float64 129 Sièges 14 int64 130 Numéro de panneau 15 int64 131 Nuance liste 15 object 132 Libellé abrégé de liste 15 object 133 Libellé de liste 15 object 134 Voix 15 int64 135 % Voix/inscrits 15 float64 136 % Voix/exprimés 15 float64 137 Sièges 15 int64 138 Numéro de panneau 16 int64 139 Nuance liste 16 object 140 Libellé abrégé de liste 16 object 141 Libellé de liste 16 object 142 Voix 16 int64 143 % Voix/inscrits 16 float64 144 % Voix/exprimés 16 float64 145 Sièges 16 int64 146 Numéro de panneau 17 int64 147 Nuance liste 17 object 148 Libellé abrégé de liste 17 object 149 Libellé de liste 17 object 150 Voix 17 int64 151 % Voix/inscrits 17 float64 152 % Voix/exprimés 17 float64 153 Sièges 17 int64 154 Numéro de panneau 18 int64 155 Nuance liste 18 object 156 Libellé abrégé de liste 18 object 157 Libellé de liste 18 object 158 Voix 18 int64 159 % Voix/inscrits 18 float64 160 % Voix/exprimés 18 float64 161 Sièges 18 int64 162 Numéro de panneau 19 int64 163 Nuance liste 19 object 164 Libellé abrégé de liste 19 object 165 Libellé de liste 19 object 166 Voix 19 int64 167 % Voix/inscrits 19 float64 168 % Voix/exprimés 19 float64 169 Sièges 19 int64 170 Numéro de panneau 20 int64 171 Nuance liste 20 object 172 Libellé abrégé de liste 20 object 173 Libellé de liste 20 object 174 Voix 20 int64 175 % Voix/inscrits 20 float64 176 % Voix/exprimés 20 float64 177 Sièges 20 int64 178 Numéro de panneau 21 int64 179 Nuance liste 21 object 180 Libellé abrégé de liste 21 object 181 Libellé de liste 21 object 182 Voix 21 int64 183 % Voix/inscrits 21 float64 184 % Voix/exprimés 21 float64 185 Sièges 21 int64 186 Numéro de panneau 22 int64 187 Nuance liste 22 object 188 Libellé abrégé de liste 22 object 189 Libellé de liste 22 object 190 Voix 22 int64 191 % Voix/inscrits 22 float64 192 % Voix/exprimés 22 float64 193 Sièges 22 int64 194 Numéro de panneau 23 int64 195 Nuance liste 23 object 196 Libellé abrégé de liste 23 object 197 Libellé de liste 23 object 198 Voix 23 int64 199 % Voix/inscrits 23 float64 200 % Voix/exprimés 23 float64 201 Sièges 23 int64 202 Numéro de panneau 24 int64 203 Nuance liste 24 object 204 Libellé abrégé de liste 24 object 205 Libellé de liste 24 object 206 Voix 24 int64 207 % Voix/inscrits 24 float64 208 % Voix/exprimés 24 float64 209 Sièges 24 int64 210 Numéro de panneau 25 int64 211 Nuance liste 25 object 212 Libellé abrégé de liste 25 object 213 Libellé de liste 25 object 214 Voix 25 int64 215 % Voix/inscrits 25 float64 216 % Voix/exprimés 25 float64 217 Sièges 25 int64 218 Numéro de panneau 26 int64 219 Nuance liste 26 object 220 Libellé abrégé de liste 26 object 221 Libellé de liste 26 object 222 Voix 26 int64 223 % Voix/inscrits 26 float64 224 % Voix/exprimés 26 float64 225 Sièges 26 int64 226 Numéro de panneau 27 int64 227 Nuance liste 27 object 228 Libellé abrégé de liste 27 object 229 Libellé de liste 27 object 230 Voix 27 int64 231 % Voix/inscrits 27 float64 232 % Voix/exprimés 27 float64 233 Sièges 27 int64 234 Numéro de panneau 28 int64 235 Nuance liste 28 object 236 Libellé abrégé de liste 28 object 237 Libellé de liste 28 object 238 Voix 28 int64 239 % Voix/inscrits 28 float64 240 % Voix/exprimés 28 float64 241 Sièges 28 int64 242 Numéro de panneau 29 int64 243 Nuance liste 29 object 244 Libellé abrégé de liste 29 object 245 Libellé de liste 29 object 246 Voix 29 int64 247 % Voix/inscrits 29 float64 248 % Voix/exprimés 29 float64 249 Sièges 29 int64 250 Numéro de panneau 30 int64 251 Nuance liste 30 object 252 Libellé abrégé de liste 30 object 253 Libellé de liste 30 object 254 Voix 30 int64 255 % Voix/inscrits 30 float64 256 % Voix/exprimés 30 float64 257 Sièges 30 int64 258 Numéro de panneau 31 int64 259 Nuance liste 31 object 260 Libellé abrégé de liste 31 object 261 Libellé de liste 31 object 262 Voix 31 int64 263 % Voix/inscrits 31 float64 264 % Voix/exprimés 31 float64 265 Sièges 31 int64 266 Numéro de panneau 32 int64 267 Nuance liste 32 object 268 Libellé abrégé de liste 32 object 269 Libellé de liste 32 object 270 Voix 32 int64 271 % Voix/inscrits 32 float64 272 % Voix/exprimés 32 float64 273 Sièges 32 int64 274 Numéro de panneau 33 int64 275 Nuance liste 33 object 276 Libellé abrégé de liste 33 object 277 Libellé de liste 33 object 278 Voix 33 int64 279 % Voix/inscrits 33 float64 280 % Voix/exprimés 33 float64 281 Sièges 33 int64 282 Numéro de panneau 34 int64 283 Nuance liste 34 object 284 Libellé abrégé de liste 34 object 285 Libellé de liste 34 object 286 Voix 34 int64 287 % Voix/inscrits 34 float64 288 % Voix/exprimés 34 float64 289 Sièges 34 int64 290 Numéro de panneau 35 int64 291 Nuance liste 35 object 292 Libellé abrégé de liste 35 object 293 Libellé de liste 35 object 294 Voix 35 int64 295 % Voix/inscrits 35 float64 296 % Voix/exprimés 35 float64 297 Sièges 35 int64 298 Numéro de panneau 36 int64 299 Nuance liste 36 object 300 Libellé abrégé de liste 36 object 301 Libellé de liste 36 object 302 Voix 36 int64 303 % Voix/inscrits 36 float64 304 % Voix/exprimés 36 float64 305 Sièges 36 int64 306 Numéro de panneau 37 int64 307 Nuance liste 37 object 308 Libellé abrégé de liste 37 object 309 Libellé de liste 37 object 310 Voix 37 int64 311 % Voix/inscrits 37 float64 312 % Voix/exprimés 37 float64 313 Sièges 37 int64 314 Numéro de panneau 38 int64 315 Nuance liste 38 object 316 Libellé abrégé de liste 38 object 317 Libellé de liste 38 object 318 Voix 38 int64 319 % Voix/inscrits 38 float64 320 % Voix/exprimés 38 float64 321 Sièges 38 int64 dtypes: float64(84), int64(120), object(118) memory usage: 1.4+ MB
In [9]:
# Sélection des colonnes utiles pour les listes de candidats et des voix
Selected_columns_nuance = [f'Libellé abrégé de liste {i}' for i in range(1, 39)]
Selected_columns_voix = [f'Voix {i}' for i in range(1, 39)]
Selected_columns_candidats = [f'Libellé de liste {i}' for i in range(1, 39)]
Selected_columns_vote = [f'% Voix/exprimés {i}' for i in range(1, 39)]
Selected_columns_vote_inscrit = [f'% Voix/inscrits {i}' for i in range(1, 39)]
# Extraction des données Circoncription
List_Candidats = Europ2024[Selected_columns_candidats].iloc[0].tolist()
Voix_Candidats = Europ2024[Selected_columns_voix].sum().tolist()
nuance_Candidats = Europ2024[Selected_columns_nuance].iloc[0].tolist()
Vote_Candidats = Europ2024[Selected_columns_vote].mean().tolist()
Vote_inscrits_Candidats = Europ2024[Selected_columns_vote_inscrit].mean().tolist()
# Création du DF suivant lesCirconcription
Df = pd.DataFrame({
'Candidats': List_Candidats,
'Nuance' : nuance_Candidats,
'Nb de Voix': Voix_Candidats,
'% voix_exprimées':Vote_Candidats,
'% voix_inscrits':Vote_inscrits_Candidats
}, index=range(1, len(List_Candidats) + 1))
# Classement par nombre de voix
Df = Df.sort_values(by='Nb de Voix', ascending=False).round(2)
# Affichage des DataFrames
# Circoncription
Resultat_Circon = Df.reset_index()
Resultat_Circon.rename(columns={'index': 'No Liste'},inplace=True)
# Rappel fonction: Tmess(message, Color='firebrick', Align='center', Size='14', Police='arial', Weight='normal', Style='italic')
Tmess('Résultats Européennes 2024','firebrick', Size='20', Weight='bold')
display(Resultat_Circon)
Résultats Européennes 2024
| No Liste | Candidats | Nuance | Nb de Voix | % voix_exprimées | % voix_inscrits | |
|---|---|---|---|---|---|---|
| 0 | 5 | LA FRANCE REVIENT ! AVEC JORDAN BARDELLA ET MA... | La FRANCE REVIENT | 7765936 | 31.03 | 15.60 |
| 1 | 11 | BESOIN D'EUROPE | BESOIN D'EUROPE | 3614646 | 14.54 | 7.25 |
| 2 | 27 | RÉVEILLER L'EUROPE | REVEIL EUR | 3424216 | 13.52 | 6.90 |
| 3 | 4 | LA FRANCE INSOUMISE - UNION POPULAIRE | LFI - UP | 2448703 | 10.76 | 5.16 |
| 4 | 18 | LA DROITE POUR FAIRE ENTENDRE LA VOIX DE LA FR... | LA DROITE POUR FAIRE ENTENDRE LA VOIX DE LA FR... | 1794171 | 7.12 | 3.63 |
| 5 | 6 | EUROPE ÉCOLOGIE | EUROPE ÉCOLOGIE | 1361883 | 5.45 | 2.74 |
| 6 | 3 | LA FRANCE FIERE, MENEE PAR MARION MARECHAL ET ... | LA FRANCE FIERE, MENEE PAR MARION MARECHAL ET ... | 1353127 | 5.48 | 2.72 |
| 7 | 33 | GAUCHE UNIE POUR LE MONDE DU TRAVAIL SOUTENUE ... | GAUCHE UNIE | 584067 | 2.34 | 1.18 |
| 8 | 29 | ALLIANCE RURALE | AR | 582901 | 2.26 | 1.17 |
| 9 | 8 | PARTI ANIMALISTE - LES ANIMAUX COMPTENT, VOTRE... | PARTI ANIMALISTE | 495936 | 1.95 | 1.00 |
| 10 | 35 | ÉCOLOGIE AU CENTRE | EAC | 316136 | 1.32 | 0.63 |
| 11 | 15 | LISTE ASSELINEAU-FREXIT, POUR LE POUVOIR D'ACH... | LISTE ASSELINEAU-FREXIT | 253036 | 1.08 | 0.51 |
| 12 | 24 | L'EUROPE CA SUFFIT ! | L'EUROPE CA SUFFIT ! | 229190 | 0.96 | 0.46 |
| 13 | 19 | LUTTE OUVRIERE - LE CAMP DES TRAVAILLEURS | LUTTE OUVRIERE | 121281 | 0.55 | 0.25 |
| 14 | 14 | ECOLOGIE POSITIVE ET TERRITOIRES | ECOLOGIE POSITIVE | 104954 | 0.41 | 0.21 |
| 15 | 13 | ÉQUINOXE : ÉCOLOGIE PRATIQUE ET RENOUVEAU DÉMO... | ÉQUINOXE | 73002 | 0.28 | 0.15 |
| 16 | 31 | EUROPE TERRITOIRES ÉCOLOGIE | EUROPE TERRITOIRES ÉCOLOGIE | 63482 | 0.25 | 0.13 |
| 17 | 22 | POUR UN MONDE SANS FRONTIERES NI PATRONS, URGE... | URGENCE REVOLUTION ! | 37434 | 0.15 | 0.08 |
| 18 | 10 | PARTI PIRATE | PARTI PIRATE | 28119 | 0.11 | 0.06 |
| 19 | 7 | FREE PALESTINE | FREE PALESTINE | 14986 | 0.07 | 0.03 |
| 20 | 21 | NOUS LE PEUPLE | NLP | 13886 | 0.06 | 0.03 |
| 21 | 20 | CHANGER L'EUROPE | CHANGER L'EUROPE | 13068 | 0.05 | 0.03 |
| 22 | 37 | ESPERANTO LANGUE COMMUNE | ESPERANTO | 10349 | 0.04 | 0.02 |
| 23 | 12 | PACE - PARTI DES CITOYENS EUROPÉENS, POUR L'AR... | PACE | 7397 | 0.03 | 0.01 |
| 24 | 30 | FRANCE LIBRE | FRANCE LIBRE | 5474 | 0.02 | 0.01 |
| 25 | 34 | DEFENDRE LES ENFANTS | DEFENDRE LES ENFANTS | 5214 | 0.02 | 0.01 |
| 26 | 26 | FORTERESSE EUROPE - LISTE D'UNITE NATIONALISTE | FORTERESSE EUROPE | 5096 | 0.02 | 0.01 |
| 27 | 23 | "POUR LE PAIN, LA PAIX, LA LIBERTÉ !" PRÉSENTÉ... | PPL | 4120 | 0.02 | 0.01 |
| 28 | 32 | LA RUCHE CITOYENNE | LA RUCHE CITOYENNE | 4038 | 0.02 | 0.01 |
| 29 | 16 | PAIX ET DECROISSANCE | PAIX ET DECROISSANCE | 3726 | 0.01 | 0.01 |
| 30 | 17 | POUR UNE AUTRE EUROPE | POUR UNE AUTRE EUROPE | 3688 | 0.01 | 0.01 |
| 31 | 28 | NON À L'UE ET À L'OTAN, COMMUNISTES POUR LA PA... | NON À L'UE ET À L'OTAN, COMMUNISTES POUR LA PA... | 3078 | 0.01 | 0.01 |
| 32 | 25 | NON ! PRENONS-NOUS EN MAINS | PRENONS-NOUS EN MAIN | 1507 | 0.01 | 0.00 |
| 33 | 9 | PARTI REVOLUTIONNAIRE COMMUNISTES | PARTI REVOLUTIONNAIRE COMMUNISTES | 1497 | 0.01 | 0.00 |
| 34 | 2 | POUR UNE DEMOCRATIE REELLE : DECIDONS NOUS-MEM... | POUR UNE DEMOCRATIE REELLE : DECIDONS NOUS-MEM... | 1443 | 0.01 | 0.00 |
| 35 | 1 | POUR UNE HUMANITE SOUVERAINE | HUMANITE SOUVERAINE | 1230 | 0.01 | 0.00 |
| 36 | 38 | LIBERTÉ DÉMOCRATIQUE FRANÇAISE | LIBERTÉ DÉMOCRATIQUE FRANÇAISE | 1007 | 0.01 | 0.00 |
| 37 | 36 | DEMOCRATIE REPRESENTATIVE | DEMOCRATIE REPRESENTATIVE | 749 | 0.00 | 0.00 |
In [11]:
# Classement des Nb_Lists premières :
EuropCirco = TopList_Europ(Europ2024, Nb_Lists = 20)
# Création de la colonne 'somme' en additionnant les valeurs des colonnes numériques
# Sélection des colonnes numériques utilisant une expression régulière
colonnes_numeriques = [col for col in EuropCirco.columns if col.startswith('% Voix Liste')]
EuropCirco['%TotalVotes'] =EuropCirco[colonnes_numeriques].sum(axis=1)
EuropCirco = EuropCirco.sort_values(by="%TotalVotes", ascending=False)
display(EuropCirco.head(2))
display(EuropCirco.tail(2))
| Code département | nomDepartement | codeCirconscription | nomCirconscription | Inscrits | Votants | % Votants | Abstentions | % Abstentions | Exprimés | ... | Liste17 | % Voix Liste17 | Liste18 | % Voix Liste18 | Liste19 | % Voix Liste19 | Liste20 | % Voix Liste20 | somme | %TotalVotes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 556 | 975 | Saint-Pierre-et-Miquelon | 97501 | Saint-Pierre-et-Miquelon | 5065 | 1071 | 21.15 | 3994 | 78.85 | 1023 | ... | FRANCE LIBRE | 0.10 | HUMANITE SOUVERAINE | 0.00 | POUR UNE DEMOCRATIE REELLE : DECIDONS NOUS-MEM... | 0.00 | FREE PALESTINE | 0.0 | 100.02 | 100.02 |
| 561 | 987 | Polynésie française | 98702 | 2ème circonscription | 69181 | 7399 | 10.70 | 61782 | 89.30 | 7103 | ... | NLP | 0.03 | PARTI PIRATE | 0.01 | DEFENDRE LES ENFANTS | 0.01 | HUMANITE SOUVERAINE | 0.0 | 100.01 | 100.01 |
2 rows × 60 columns
| Code département | nomDepartement | codeCirconscription | nomCirconscription | Inscrits | Votants | % Votants | Abstentions | % Abstentions | Exprimés | ... | Liste17 | % Voix Liste17 | Liste18 | % Voix Liste18 | Liste19 | % Voix Liste19 | Liste20 | % Voix Liste20 | somme | %TotalVotes | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 504 | 92 | Hauts-de-Seine | 9212 | 12ème circonscription | 94555 | 55899 | 59.12 | 38656 | 40.88 | 54909 | ... | ÉQUINOXE | 0.38 | FORTERESSE EUROPE | 0.29 | EUROPE TERRITOIRES ÉCOLOGIE | 0.28 | PACE | 0.27 | 99.02 | 99.02 |
| 548 | 973 | Guyane | 97302 | 2ème circonscription | 49813 | 3722 | 7.47 | 46091 | 92.53 | 3528 | ... | PARTI ANIMALISTE | 0.17 | PARTI PIRATE | 0.17 | FRANCE LIBRE | 0.17 | PPL | 0.14 | 99.02 | 99.02 |
2 rows × 60 columns
In [ ]:
In [13]:
Legis2022 = pd.read_excel("Legis2022-Circons.xlsx")
Legis2022.info(1)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 550 entries, 0 to 549 Data columns (total 47 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 COD_CIRCONS 550 non-null object 1 Inscrits 550 non-null int64 2 Abstentions 550 non-null int64 3 % Abs/Ins 550 non-null float64 4 Votants 550 non-null int64 5 % Vot/Ins 550 non-null float64 6 Blancs 550 non-null int64 7 Blancs/Ins 550 non-null float64 8 % Blancs/Vot 550 non-null float64 9 Nuls 550 non-null int64 10 % Nuls/Ins 550 non-null float64 11 % Nuls/Vot 550 non-null float64 12 Exprimés 550 non-null int64 13 % Exp/Ins 550 non-null float64 14 % Exp/Vot 550 non-null float64 15 DIV Voix 550 non-null int64 16 DIV % Voix/Exp 550 non-null float64 17 DSV Voix 550 non-null int64 18 DSV % Voix/Exp 550 non-null float64 19 DVC Voix 550 non-null int64 20 DVC % Voix/Exp 550 non-null float64 21 DVD Voix 550 non-null int64 22 DVD % Voix/Exp 550 non-null float64 23 DVG Voix 550 non-null int64 24 DVG % Voix/Exp 550 non-null float64 25 DXD Voix 550 non-null int64 26 DXD % Voix/Exp 550 non-null float64 27 DXG Voix 550 non-null int64 28 DXG % Voix/Exp 550 non-null float64 29 ECO Voix 550 non-null int64 30 ECO % Voix/Exp 550 non-null float64 31 ENS Voix 550 non-null int64 32 ENS % Voix/Exp 550 non-null float64 33 LR Voix 550 non-null int64 34 LR % Voix/Exp 550 non-null float64 35 NUP Voix 550 non-null int64 36 NUP % Voix/Exp 550 non-null float64 37 RDG Voix 550 non-null int64 38 RDG % Voix/Exp 550 non-null float64 39 REC Voix 550 non-null int64 40 REC % Voix/Exp 550 non-null float64 41 Reg Voix 550 non-null int64 42 REG % Voix/Exp 550 non-null float64 43 RN Voix 550 non-null int64 44 RN % Voix/Exp 550 non-null float64 45 UDI Voix 550 non-null int64 46 UDI % Voix/Exp 550 non-null float64 dtypes: float64(24), int64(22), object(1) memory usage: 202.1+ KB
In [14]:
Resultat_2022 = top_Legis2022(Legis2022,4)
Resultat_2022
Out[14]:
| COD_CIRCONS | Inscrits | Abstentions | % Abs/Ins | Votants | % Vot/Ins | Blancs | Blancs/Ins | % Blancs/Vot | Nuls | ... | DIV % Voix/Exp | DSV Voix | Top_1_List | Top_1_% | Top_2_List | Top_2_% | Top_3_List | Top_3_% | Top_4_List | Top_4_% | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0101 | 86187 | 43652 | 49.306930 | 42535 | 50.693070 | 490 | 0.586842 | 1.165789 | 234 | ... | 0.00 | 641 | LR % Voix/Exp | 25.43 | NUP % Voix/Exp | 23.01 | RN % Voix/Exp | 22.94 | ENS % Voix/Exp | 18.42 |
| 1 | 0102 | 98818 | 49731 | 49.657596 | 49087 | 50.342500 | 619 | 0.650673 | 1.292692 | 166 | ... | 0.52 | 653 | ENS % Voix/Exp | 25.77 | NUP % Voix/Exp | 24.87 | RN % Voix/Exp | 23.75 | LR % Voix/Exp | 15.32 |
| 2 | 0103 | 82204 | 45946 | 52.908636 | 36258 | 47.091364 | 385 | 0.647636 | 1.332182 | 144 | ... | 0.77 | 543 | ENS % Voix/Exp | 28.19 | NUP % Voix/Exp | 23.07 | LR % Voix/Exp | 17.92 | RN % Voix/Exp | 15.59 |
| 3 | 0104 | 94897 | 49258 | 50.662672 | 45639 | 49.337414 | 640 | 0.736810 | 1.499914 | 207 | ... | 0.00 | 562 | RN % Voix/Exp | 25.52 | LR % Voix/Exp | 16.89 | NUP % Voix/Exp | 16.89 | ENS % Voix/Exp | 15.72 |
| 4 | 0105 | 77456 | 40382 | 47.157338 | 37074 | 52.842662 | 820 | 1.375468 | 2.502662 | 206 | ... | 1.53 | 436 | NUP % Voix/Exp | 24.32 | RN % Voix/Exp | 19.64 | DVD % Voix/Exp | 18.32 | LR % Voix/Exp | 9.18 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 545 | 9707 | 238760 | 168793 | 71.126593 | 69967 | 28.873462 | 1359 | 0.900824 | 3.273187 | 1307 | ... | 1.48 | 636 | NUP % Voix/Exp | 24.94 | DVC % Voix/Exp | 12.13 | ENS % Voix/Exp | 10.72 | DVG % Voix/Exp | 8.68 |
| 546 | 9708 | 131219 | 115176 | 83.964167 | 16043 | 16.035833 | 180 | 0.245000 | 1.565833 | 16 | ... | 3.30 | 0 | ENS % Voix/Exp | 27.31 | UDI % Voix/Exp | 23.15 | NUP % Voix/Exp | 22.74 | REC % Voix/Exp | 7.05 |
| 547 | 9709 | 120556 | 102826 | 84.742778 | 17730 | 15.257222 | 392 | 0.357222 | 2.686111 | 70 | ... | 0.10 | 0 | NUP % Voix/Exp | 40.20 | ENS % Voix/Exp | 25.91 | DVD % Voix/Exp | 6.38 | REC % Voix/Exp | 5.81 |
| 548 | 9710 | 104303 | 83943 | 78.094894 | 20360 | 21.905106 | 290 | 0.407021 | 1.868511 | 45 | ... | 1.04 | 158 | NUP % Voix/Exp | 33.08 | ENS % Voix/Exp | 28.05 | LR % Voix/Exp | 9.35 | REC % Voix/Exp | 8.07 |
| 549 | 9711 | 98853 | 70840 | 73.298776 | 28013 | 26.701224 | 324 | 0.333878 | 1.229184 | 57 | ... | 0.00 | 481 | ENS % Voix/Exp | 34.23 | NUP % Voix/Exp | 26.49 | REC % Voix/Exp | 10.35 | DVC % Voix/Exp | 8.93 |
550 rows × 26 columns
In [15]:
# Sauvegarde du fichier préparé:
#Resultat_2022.to_excel("4eresListes2022.xlsx", index=True)
In [18]:
Prev2024=pd.read_excel("PrevisionsLegis_2024.xlsx")
#Prev2024=Prev2024.iloc[0:539]
#Prev2024.iloc[:,18:45]
Prev2024.info(1)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 577 entries, 0 to 576 Data columns (total 64 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Code département 577 non-null object 1 Libellé département 577 non-null object 2 Code circonscription législative 577 non-null object 3 Libellé circonscription législative 577 non-null object 4 Inscrits 577 non-null int64 5 Votants 577 non-null int64 6 % Votants 577 non-null float64 7 Abstentions 577 non-null int64 8 % Abstentions 577 non-null float64 9 Exprimés 577 non-null int64 10 % Exprimés/inscrits 577 non-null float64 11 % Exprimés/votants 577 non-null float64 12 Blancs 577 non-null int64 13 % Blancs/inscrits 577 non-null float64 14 % Blancs/votants 577 non-null float64 15 Nuls 577 non-null int64 16 % Nuls/inscrits 577 non-null float64 17 % Nuls/votants 577 non-null float64 18 Divers centre 539 non-null float64 19 Nb VOIX DIVC 577 non-null float64 20 %VOIX DIVC 577 non-null float64 21 Divers gauche 577 non-null int64 22 Nb VOIX DIVG 577 non-null float64 23 %VOIX Divers Gauche 577 non-null float64 24 Ecologistes 577 non-null int64 25 Nb VOIX Ecologiques 577 non-null int64 26 %VOIX Ecologie 577 non-null float64 27 Ensemble 577 non-null int64 28 Nb VOIX Ensemble 577 non-null float64 29 %VOIX Ensemble 577 non-null float64 30 Extrême droite 577 non-null int64 31 Nb VOIX EXT Droite 577 non-null float64 32 %VOIX EXT Droite 577 non-null float64 33 Extrême gauche 577 non-null int64 34 NB VOIX EXTG 577 non-null int64 35 %VOIX Ext Gauche 577 non-null float64 36 Horizons 577 non-null int64 37 Nb VOIX Horizons 577 non-null float64 38 %VOIX Horizons 577 non-null float64 39 Les Républicains 577 non-null int64 40 Nb VOIX Les Républicains 577 non-null float64 41 %VOIX Les Républicains 577 non-null float64 42 Parti socialiste 577 non-null int64 43 Nb VOIX PS 577 non-null int64 44 %VOIX PS 577 non-null float64 45 Rassemblement National 577 non-null int64 46 Nb VOIX RN 577 non-null float64 47 %VOIX RN 577 non-null float64 48 Reconquête ! 577 non-null int64 49 Nb VOIX Reconquête 577 non-null float64 50 %VOIX Reconquête 577 non-null float64 51 Régionaliste 577 non-null int64 52 Nb VOIX REG 577 non-null int64 53 %VOIX REG 577 non-null float64 54 Union de la gauche 577 non-null int64 55 Nb VOIX UG 577 non-null float64 56 %VOIX UG 577 non-null float64 57 Union de l'extrême droite 577 non-null int64 58 Nb VOIX Union EXTD 577 non-null float64 59 %VOIX EXTD 577 non-null float64 60 Union des Démocrates et Indépendants 577 non-null int64 61 Nb VOIX UDI 577 non-null float64 62 %VOIX UDI 577 non-null float64 63 TOTAL %VOIX/exp 577 non-null float64 dtypes: float64(36), int64(24), object(4) memory usage: 288.6+ KB
In [19]:
# Prévisions du % de vote des 3 principales listes
Tmess("Union Gauche tout confondu: {}%".format(round((Prev2024["%VOIX UG"]+Prev2024["%VOIX PS"]+Prev2024["%VOIX Ecologie"]).mean()*100,2)),
Color='red', Align='left', Weight='bold')
Tmess("Union Gauche seule: {}%".format(round((Prev2024["%VOIX UG"]).mean()*100,2)),
Color='red', Align='left', Weight='bold')
Tmess("Ensemble tout confondu: {}%".format(round((Prev2024["%VOIX Ensemble"]+Prev2024["%VOIX Horizons"]+Prev2024["%VOIX UDI"]).mean()*100,2)),
Color='peru', Align='left', Weight='bold')
Tmess("Ensemble seule: {}%".format(round((Prev2024["%VOIX Ensemble"]).mean()*100,2)),
Color='peru', Align='left', Weight='bold')
Tmess("RN&Alliés tout confondu: {}%".format(round((Prev2024["%VOIX RN"]+Prev2024["%VOIX EXTD"]).mean()*100,2)),
Color='darkblue', Align='left', Weight='bold')
Tmess("RN seul: {}%".format(round((Prev2024["%VOIX RN"]).mean()*100,2)),
Color='darkblue', Align='left', Weight='bold')
Tmess("Les Républicains: {}%".format(round((Prev2024["%VOIX Les Républicains"]).mean()*100,2)),
Color='blue', Align='left', Weight='bold')
Union Gauche tout confondu: 26.48%
Union Gauche seule: 24.71%
Ensemble tout confondu: 18.77%
Ensemble seule: 17.69%
RN&Alliés tout confondu: 35.48%
RN seul: 31.58%
Les Républicains: 1.56%
In [21]:
Resultat_2024 = top_Legis2022(Prev2024,5,AN=22)
# Afficher les résultats
Resultat_2024.iloc[:,18:30].head(3)
Out[21]:
| Top_1_List | Top_1_% | Top_2_List | Top_2_% | Top_3_List | Top_3_% | Top_4_List | Top_4_% | Top_5_List | Top_5_% | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | %VOIX RN | 0.43223 | %VOIX UG | 0.21908 | %VOIX Ensemble | 0.21706 | %VOIX Les Républicains | 0.03088 | %VOIX Ext Gauche | 0.0054 |
| 1 | %VOIX RN | 0.42522 | %VOIX DIVC | 0.22806 | %VOIX UG | 0.22278 | %VOIX Les Républicains | 0.03168 | %VOIX Ext Gauche | 0.0048 |
| 2 | %VOIX RN | 0.33492 | %VOIX UG | 0.26926 | %VOIX Ensemble | 0.26006 | %VOIX Les Républicains | 0.02884 | %VOIX Ext Gauche | 0.0050 |
In [22]:
# Estimation Elu 1er tour
Tmess("Projection du Nb de candidats RN élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= 0.5) &
(Resultat_2024["Top_1_List"] == "%VOIX RN")].shape[0]),
Color ='darkblue', Align='left', Weight='bold')
Tmess("Projection du Nb de candidats UG élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= 0.5) &
(Resultat_2024["Top_1_List"] == "%VOIX UG")].shape[0]),
Color ='red', Align='left', Weight='bold')
Tmess("Projection du Nb de candidats Ensemble élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= 0.5) &
(Resultat_2024["Top_1_List"] == "%VOIX Ensemble")].shape[0]),
Color ='peru', Align='left', Weight='bold')
Projection du Nb de candidats RN élus au 1er Tour: 53 Sièges
Projection du Nb de candidats UG élus au 1er Tour: 20 Sièges
Projection du Nb de candidats Ensemble élus au 1er Tour: 0 Sièges
In [24]:
# Choix du taux de participation supplémentaire par rapport au Européennes 2024
TauxVote = 0.3
# Choix de la répartition des votes supplémentaires en % (UG,RN,ENS etLR)
Tauxsup = [0.3,0.2,0.35,0.15]
# Création de la table à partir du DF Prev2024
Votants = Prev2024.iloc[:, :6]
Votants=Votants.rename(columns={"Votants": "Votants_EE (Base)"})
In [25]:
# Création des colonnes du DF
# Adaptation des résultats de listes en fonction des votes supplémentaires:
Votants["Votants"] = round(Votants["Votants_EE (Base)"] * TauxVote + Votants["Votants_EE (Base)"],0).astype(int)
Votants["% Votants"] = round((Votants["Votants"] * 100) / Votants["Inscrits"],2)
Votants["Votants Supp"] = Votants["Votants"] - Votants["Votants_EE (Base)"]
Votants["Voix Supp - UG"] = round(Votants["Votants Supp"] * Tauxsup[0],2).astype(int)
Votants["Voix Supp - RN"] = round(Votants["Votants Supp"] * Tauxsup[1],2).astype(int)
Votants["Voix Supp - ENS"] = round(Votants["Votants Supp"] * Tauxsup[2],2).astype(int)
Votants["Voix Supp - LR"] = round(Votants["Votants Supp"] * Tauxsup[3],2).astype(int)
Votants["Abstentions"] = Votants["Inscrits"] - Votants["Votants"]
Votants["% Abstentions"] = round((Votants["Abstentions"] * 100) / Votants["Inscrits"],2)
Votants["% nuls/blancs Exprimes"] = round((Prev2024["% Blancs/votants"] + Prev2024["% Nuls/votants"]) * 100,2)
Votants["% nuls/blancs Inscrits"] = round((Prev2024["% Blancs/inscrits"] + Prev2024["% Nuls/inscrits"]) * 100,2)
Votants["nuls/blancs"] = round((Votants["% nuls/blancs Exprimes"] * Votants["Votants"])/100,0).astype(int)
Votants["% Expr/Inscrit Supp"] = round(Votants["% Votants"] - Votants["% nuls/blancs Inscrits"],2)
Votants["% Expr/Votants Supp"] = round(100 -Votants["% nuls/blancs Exprimes"],2)
Votants["Voix Exprimées Totales"] = round((Votants["Votants"] * Votants["% Expr/Votants Supp"])/100,0).astype(int)
Votants.head(1)
Out[25]:
| Code département | Libellé département | Code circonscription législative | Libellé circonscription législative | Inscrits | Votants_EE (Base) | Votants | % Votants | Votants Supp | Voix Supp - UG | ... | Voix Supp - ENS | Voix Supp - LR | Abstentions | % Abstentions | % nuls/blancs Exprimes | % nuls/blancs Inscrits | nuls/blancs | % Expr/Inscrit Supp | % Expr/Votants Supp | Voix Exprimées Totales | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 01 | Ain | 0101 | 1ère circonscription | 86824 | 48408 | 62930 | 72.48 | 14522 | 4356 | ... | 5082 | 2178 | 23894 | 27.52 | 3.14 | 1.75 | 1976 | 70.73 | 96.86 | 60954 |
1 rows × 21 columns
In [26]:
# Filtrer les colonnes 'Nb VOIX' ou '%VOIX' des différentes listes
colonnes_Listes = [col for col in Prev2024.columns if col.startswith('Nb VOIX') or col.startswith('%VOIX')]
# Sélectionner les colonnes filtrées à partir de df_original
df_List = Prev2024[colonnes_Listes]
# Concaténer df_exist avec df_voix horizontalement
Votants = pd.concat([Votants, df_List], axis=1)
Votants.head(2)
Out[26]:
| Code département | Libellé département | Code circonscription législative | Libellé circonscription législative | Inscrits | Votants_EE (Base) | Votants | % Votants | Votants Supp | Voix Supp - UG | ... | Nb VOIX Reconquête | %VOIX Reconquête | Nb VOIX REG | %VOIX REG | Nb VOIX UG | %VOIX UG | Nb VOIX Union EXTD | %VOIX EXTD | Nb VOIX UDI | %VOIX UDI | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 01 | Ain | 0101 | 1ère circonscription | 86824 | 48408 | 62930 | 72.48 | 14522 | 4356 | ... | 0.0 | 0.0 | 0 | 0.0 | 10269.6 | 0.21908 | 0.0 | 0.0 | 0.0 | 0.0 |
| 1 | 01 | Ain | 0102 | 2ème circonscription | 102088 | 58219 | 75685 | 74.14 | 17466 | 5239 | ... | 0.0 | 0.0 | 0 | 0.0 | 12685.6 | 0.22278 | 0.0 | 0.0 | 0.0 | 0.0 |
2 rows × 50 columns
In [27]:
# Ajout des autres lites
D_VoteSup = pd.DataFrame()
# Divers Centre
D_VoteSup["Nb VOIX DVC SUP"] = Votants["Nb VOIX DIVC"]
D_VoteSup["%VOIX DVC SUP"] = D_VoteSup["Nb VOIX DVC SUP"] / Votants["Voix Exprimées Totales"]
# Divers Gauche
D_VoteSup["Nb VOIX DVG SUP"] = Votants["Nb VOIX DIVG"]
D_VoteSup["%VOIX DVG SUP"] = D_VoteSup["Nb VOIX DVG SUP"] / Votants["Voix Exprimées Totales"]
# Ecologiste
D_VoteSup["Nb VOIX Ecologistes SUP"] = Votants["Nb VOIX Ecologiques"]
D_VoteSup["%Nb VOIX Ecologistes SUP"] = D_VoteSup["Nb VOIX Ecologistes SUP"] / Votants["Voix Exprimées Totales"]
# Ensemble/Renaissance
D_VoteSup["Nb VOIX ENS SUP"] = Votants["Nb VOIX Ensemble"]
D_VoteSup["%Nb VOIX ENS SUP"] = D_VoteSup["Nb VOIX ENS SUP"] / Votants["Voix Exprimées Totales"]
# Extrème Droite
D_VoteSup["Nb VOIX EXTD SUP"] = Votants["Nb VOIX EXT Droite"]
D_VoteSup["%Nb VOIX EXTD SUP"] = D_VoteSup["Nb VOIX EXTD SUP"] / Votants["Voix Exprimées Totales"]
D_VoteSup.head()
Out[27]:
| Nb VOIX DVC SUP | %VOIX DVC SUP | Nb VOIX DVG SUP | %VOIX DVG SUP | Nb VOIX Ecologistes SUP | %Nb VOIX Ecologistes SUP | Nb VOIX ENS SUP | %Nb VOIX ENS SUP | Nb VOIX EXTD SUP | %Nb VOIX EXTD SUP | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0 | 0.000000 | 0.0 | 0.0 | 0 | 0.00000 | 10176.8 | 0.166959 | 0.0 | 0.0 |
| 1 | 12989.4 | 0.175414 | 0.0 | 0.0 | 0 | 0.00000 | 0.0 | 0.000000 | 0.0 | 0.0 |
| 2 | 0.0 | 0.000000 | 0.0 | 0.0 | 0 | 0.00000 | 10891.4 | 0.200051 | 0.0 | 0.0 |
| 3 | 0.0 | 0.000000 | 0.0 | 0.0 | 0 | 0.00000 | 11183.0 | 0.166634 | 0.0 | 0.0 |
| 4 | 0.0 | 0.000000 | 0.0 | 0.0 | 2034 | 0.03895 | 7504.0 | 0.143697 | 0.0 | 0.0 |
In [28]:
# Sauvegarde du fichier préparé:
Votants.to_excel("Prev2024_+30%.xlsx", index=True)
NB: vous verrez "25%" dans le nom de certaines colonnes prenant en compte l'augmentation de participation prévisionnelle. Différentes sources m'ont fait opté pour une augmentation de 30%. Cependant, pris par l'urgence, j'ai laissé le nom des colonnes initial.¶
In [31]:
# Prédiction à partir du fichier comprenant un taux de votants supérieur au taux de votants des Européennes 2024
Résultats_Ajustée= pd.read_excel("PrevisionsLegis_2024_ajuste.xlsx")
Résultats_Ajustée.iloc[:,25:40].head(2)
Out[31]:
| % Blancs/inscrits | % Blancs/votants | Nuls | % Nuls/inscrits | % Nuls/votants | Divers centre | Nb VOIX DIVC | %VOIX DIVC | NbVOIX25% DIVC | %VOIX25% DIVC | Divers gauche | Nb VOIX DIVG | %VOIX Divers Gauche | NbVOIX25% DIVG | %VOIX25% DIVG | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0084 | 0.0151 | 789 | 0.0091 | 0.0163 | 0.0 | 0.0 | 0.00000 | 0.0 | 0.000000 | 0 | 0.0 | 0.0 | 0.0 | 0.0 |
| 1 | 0.0071 | 0.0124 | 537 | 0.0053 | 0.0092 | 1.0 | 12989.4 | 0.22806 | 12989.4 | 0.175414 | 0 | 0.0 | 0.0 | 0.0 | 0.0 |
In [32]:
Tmess("Projections des résultats du 1er tour des Législatives 2024",Color='firebrick', Align='center', Weight='bold',Size='20')
print("")
Tmess("Rassemblement National: {}%".format(round((Résultats_Ajustée["%VOIX25% RN"] + Résultats_Ajustée["%VOIX25% UEXTD"] +
Résultats_Ajustée["%VOIX25% Reconquête"]).mean() * 100,2)),
Color='darkblue', Align='left', Weight='bold')
Tmess("Union des Gauches: {}%".format(round((Résultats_Ajustée["%VOIX25% PS"] + Résultats_Ajustée["%VOIX25% UG"] +
Résultats_Ajustée["%VOIX25% DIVG"]).mean() * 100,2)),
Color='red', Align='left', Weight='bold')
Tmess("Ensemble / Renaissance: {}%".format(round((Résultats_Ajustée["%VOIX25% Ensemble"] + Résultats_Ajustée["%VOIX25% Horizons"]).mean() * 100,2)),
Color='peru', Align='left', Weight='bold')
Tmess("Les Républicains: {}%".format(round((Résultats_Ajustée["%VOIX25% Les Républicains"]).mean() * 100,2)),
Color='blue', Align='left', Weight='bold')
Tmess("Divers Droite: {}%".format(round((Résultats_Ajustée["%VOIX25% DIVC"]).mean() * 100,2)),
Color='blue', Align='left', Weight='bold')
Projections des résultats du 1er tour des Législatives 2024
Rassemblement National: 33.14%
Union des Gauches: 27.64%
Ensemble / Renaissance: 21.88%
Les Républicains: 3.07%
Divers Droite: 3.01%
In [33]:
# Classement du df par Nb de voix:
Resultat_2024 = top_Legis2022(Résultats_Ajustée,5)
Resultat_2024.head(3)
Out[33]:
| Code département | Libellé département | Code circonscription législative | Libellé circonscription législative | Inscrits | Votants | % Votants | Votants25% | % Votants25% | VotantsSup25% | ... | Top_1_List | Top_1_% | Top_2_List | Top_2_% | Top_3_List | Top_3_% | Top_4_List | Top_4_% | Top_5_List | Top_5_% | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 01 | Ain | 0101 | 1ère circonscription | 86824 | 48408 | 0.5575 | 62930.4 | 0.724804 | 14522.4 | ... | %VOIX25% RN | 0.380153 | %VOIX25% Ensemble | 0.250345 | %VOIX25% UG | 0.239955 | %VOIX25% Les Républicains | 0.059506 | %VOIX25% EXTG | 0.004118 |
| 1 | 01 | Ain | 0102 | 2ème circonscription | 102088 | 58219 | 0.5703 | 75684.7 | 0.741367 | 17465.7 | ... | %VOIX25% RN | 0.374210 | %VOIX25% UG | 0.242071 | %VOIX25% DIVC | 0.175414 | %VOIX25% Les Républicains | 0.059742 | %VOIX25% EXTG | 0.003633 |
| 2 | 01 | Ain | 0103 | 3ème circonscription | 85884 | 42940 | 0.5000 | 55822.0 | 0.649970 | 12882.0 | ... | %VOIX25% RN | 0.304967 | %VOIX25% Ensemble | 0.282865 | %VOIX25% UG | 0.278106 | %VOIX25% Les Républicains | 0.057673 | %VOIX25% EXTG | 0.003820 |
3 rows × 28 columns
In [34]:
# Estimation Elu 1er tour
Tmess("Estimations Elus dès le 1er tour - Scénarii retenus",'black',Size='20', Weight='bold')
for i in np.arange(0.43, 0.45, 0.01):
print("")
Tmess("Estimation pour % votes supérieur à {}%".format(i*100))
Tmess("Projection du Nb de candidats RN élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= i) &
(Resultat_2024["Top_1_List"] == "%VOIX25% RN")].shape[0]),
Color ='darkblue', Align='left', Weight='bold')
Tmess("Projection du Nb de candidats UG élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= i) &
(Resultat_2024["Top_1_List"] == "%VOIX25% UG")].shape[0]),
Color ='red', Align='left', Weight='bold')
Tmess("Projection du Nb de candidats Ensemble élus au 1er Tour: {} Sièges".format(Resultat_2024.loc[(Resultat_2024["Top_1_%"] >= i) &
(Resultat_2024["Top_1_List"] == "%VOIX25% Ensemble")].shape[0]),
Color ='peru', Align='left', Weight='bold')
Estimations Elus dès le 1er tour - Scénarii retenus
Estimation pour % votes supérieur à 43.0%
Projection du Nb de candidats RN élus au 1er Tour: 57 Sièges
Projection du Nb de candidats UG élus au 1er Tour: 35 Sièges
Projection du Nb de candidats Ensemble élus au 1er Tour: 0 Sièges
Estimation pour % votes supérieur à 44.0%
Projection du Nb de candidats RN élus au 1er Tour: 42 Sièges
Projection du Nb de candidats UG élus au 1er Tour: 33 Sièges
Projection du Nb de candidats Ensemble élus au 1er Tour: 0 Sièges
Estimation pour % votes supérieur à 45.0%
Projection du Nb de candidats RN élus au 1er Tour: 29 Sièges
Projection du Nb de candidats UG élus au 1er Tour: 28 Sièges
Projection du Nb de candidats Ensemble élus au 1er Tour: 0 Sièges
In [36]:
Résulats_2024_Ajus = top_Legis2022(Résultats_Ajustée,5)
Résulats_2024_Ajus.iloc[:,18:26].head(3)
Out[36]:
| Top_1_List | Top_1_% | Top_2_List | Top_2_% | Top_3_List | Top_3_% | Top_4_List | Top_4_% | |
|---|---|---|---|---|---|---|---|---|
| 0 | %VOIX25% RN | 0.380153 | %VOIX25% Ensemble | 0.250345 | %VOIX25% UG | 0.239955 | %VOIX25% Les Républicains | 0.059506 |
| 1 | %VOIX25% RN | 0.374210 | %VOIX25% UG | 0.242071 | %VOIX25% DIVC | 0.175414 | %VOIX25% Les Républicains | 0.059742 |
| 2 | %VOIX25% RN | 0.304967 | %VOIX25% Ensemble | 0.282865 | %VOIX25% UG | 0.278106 | %VOIX25% Les Républicains | 0.057673 |
In [37]:
Tmess("Estimation principales listes et alliés",Size='20', Weight='bold')
Tmess("Rassemblement National: {}%".format(round((Résultats_Ajustée["%VOIX25% RN"] + Résultats_Ajustée["%VOIX25% UEXTD"] +
Résultats_Ajustée["%VOIX25% Reconquête"]).mean() * 100,2)),'darkblue',Align='left', Weight='bold')
Tmess("Union des Gauches: {}%".format(round((Résultats_Ajustée["%VOIX25% PS"] + Résultats_Ajustée["%VOIX25% UG"] +
Résultats_Ajustée["%VOIX25% DIVG"]).mean() * 100,2)),'red',Align='left', Weight='bold')
Tmess("Ensemble / Renaissance: {}%".format(round((Résultats_Ajustée["%VOIX25% Ensemble"] + Résultats_Ajustée["%VOIX25% Horizons"]
).mean() * 100,2)),'peru',Align='left', Weight='bold')
Tmess("Estimation principales listes seules",Size='20', Weight='bold')
Tmess("Rassemblement National: {}%".format(round((Résultats_Ajustée["%VOIX25% RN"]).mean() * 100,2)),'darkblue',Align='left', Weight='bold')
Tmess("Union des Gauches: {}%".format(round((Résultats_Ajustée["%VOIX25% UG"]).mean() * 100,2)),'red',Align='left', Weight='bold')
Tmess("Ensemble / Renaissance: {}%".format(round((Résultats_Ajustée["%VOIX25% Ensemble"]).mean() * 100,2)),'peru',Align='left', Weight='bold')
Tmess("Les Républicains: {}%".format(round((Résultats_Ajustée["%VOIX25% Les Républicains"] + Résultats_Ajustée["%VOIX25% UDI"]).mean() * 100,2)),'blue',Align='left', Weight='bold')
Tmess("Les DIVC: {}%".format(round((Résultats_Ajustée["%VOIX25% DIVC"]).mean() * 100,2)),'blue',Align='left', Weight='bold')
Estimation principales listes et alliés
Rassemblement National: 33.14%
Union des Gauches: 27.64%
Ensemble / Renaissance: 21.88%
Estimation principales listes seules
Rassemblement National: 28.41%
Union des Gauches: 26.91%
Ensemble / Renaissance: 21.18%
Les Républicains: 3.41%
Les DIVC: 3.01%
In [38]:
# Création du DF en vu du visuel
Resultats_Visuel = Résulats_2024_Ajus.iloc[:,:3]
Resultats_Visuel["Elu"] = Résulats_2024_Ajus["Top_1_List"]
Resultats_Visuel["% Votes"] = Résulats_2024_Ajus["Top_1_%"]
Resultats_Visuel["Second"] = Résulats_2024_Ajus["Top_2_List"]
Resultats_Visuel["% Votes2"] = Résulats_2024_Ajus["Top_2_%"]
Resultats_Visuel["Troisième"] = Résulats_2024_Ajus["Top_3_List"]
Resultats_Visuel["% Votes3"] = Résulats_2024_Ajus["Top_3_%"]
#Resultats_Visuel = Resultats_Visuel.rename(columns={"En-Tête":"Elu", "Code circonscription législative":"codeCirconscription"})
Resultats_Visuel = Resultats_Visuel.rename(columns={"En-Tête":"Elu", "Code circonscription législative":"codeCirconscription"})
Resultats_Visuel.head()
Out[38]:
| Code département | Libellé département | codeCirconscription | Elu | % Votes | Second | % Votes2 | Troisième | % Votes3 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 01 | Ain | 0101 | %VOIX25% RN | 0.380153 | %VOIX25% Ensemble | 0.250345 | %VOIX25% UG | 0.239955 |
| 1 | 01 | Ain | 0102 | %VOIX25% RN | 0.374210 | %VOIX25% UG | 0.242071 | %VOIX25% DIVC | 0.175414 |
| 2 | 01 | Ain | 0103 | %VOIX25% RN | 0.304967 | %VOIX25% Ensemble | 0.282865 | %VOIX25% UG | 0.278106 |
| 3 | 01 | Ain | 0104 | %VOIX25% RN | 0.406057 | %VOIX25% Ensemble | 0.249900 | %VOIX25% UG | 0.215380 |
| 4 | 01 | Ain | 0105 | %VOIX25% UEXTD | 0.333979 | %VOIX25% UG | 0.247175 | %VOIX25% Ensemble | 0.227085 |
In [39]:
# Charger les données géographiques des circonscriptions législatives françaises
geojson_url = 'circonscriptions-legislatives-p20.geojson'
gdf = gpd.read_file(geojson_url)
In [40]:
Resultats_Visuel["Elu"].unique()
Out[40]:
array(['%VOIX25% RN', '%VOIX25% UEXTD', '%VOIX25% EXTD', '%VOIX25% UG',
'%VOIX25% Ensemble', '%VOIX25% REG', '%VOIX25% DIVG',
'%VOIX25% PS', '%VOIX25% DIVC', '%VOIX25% Horizons'], dtype=object)
In [41]:
# Dictionnaire de remplacement des noms de Listes
remplacements = {
'%VOIX25% RN': 'RN',
'%VOIX25% UEXTD' : 'Union Ext Droite',
'%VOIX25% EXTD' : 'Extrême Droite',
'%VOIX25% UG' : 'Union des Gauche',
'%VOIX25% Ensemble' : 'Renaissance-Ensemble',
'%VOIX25% REG' : 'Régionaliste',
'%VOIX25% DIVG' : 'Divers Gauche',
'%VOIX25% PS' : 'Parti Socialiste',
'%VOIX25% DIVC' : 'Divers Centre',
'%VOIX25% Horizons' : 'Horizons'
}
# Remplacer les valeurs dans la colonne "liste"
Resultats_Visuel[['Elu', 'Second', 'Troisième']] = Resultats_Visuel[['Elu', 'Second', 'Troisième']].replace(remplacements)
Resultats_Visuel.head()
Out[41]:
| Code département | Libellé département | codeCirconscription | Elu | % Votes | Second | % Votes2 | Troisième | % Votes3 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 01 | Ain | 0101 | RN | 0.380153 | Renaissance-Ensemble | 0.250345 | Union des Gauche | 0.239955 |
| 1 | 01 | Ain | 0102 | RN | 0.374210 | Union des Gauche | 0.242071 | Divers Centre | 0.175414 |
| 2 | 01 | Ain | 0103 | RN | 0.304967 | Renaissance-Ensemble | 0.282865 | Union des Gauche | 0.278106 |
| 3 | 01 | Ain | 0104 | RN | 0.406057 | Renaissance-Ensemble | 0.249900 | Union des Gauche | 0.215380 |
| 4 | 01 | Ain | 0105 | Union Ext Droite | 0.333979 | Union des Gauche | 0.247175 | Renaissance-Ensemble | 0.227085 |
In [42]:
# Joindre les données sur la colonne 'Code circonscription législative'
Visuel = gdf.merge(Resultats_Visuel, left_on='codeCirconscription', right_on='codeCirconscription')
In [43]:
Resultats_Visuel['Elu'].unique()
Out[43]:
array(['RN', 'Union Ext Droite', 'Extrême Droite', 'Union des Gauche',
'Renaissance-Ensemble', 'Régionaliste', 'Divers Gauche',
'Parti Socialiste', 'Divers Centre', 'Horizons'], dtype=object)
In [79]:
Carte_Results_1erT(Visuel,Resultats_Visuel)
Out[79]:
Make this Notebook Trusted to load map: File -> Trust Notebook